package estrategias;

import java.util.Date;

import juegos.*;

/**
 * 
 * @author DaNieLooP
 *
 */
public class Voraz implements Estrategia {

	/**
	 * metodo que resuelve un problema por enfriamiento simulado.
	 * @param nInicial nodo inicial
	 * @param nFinal nodo final
	 * @return nodo al que llegamos
	 */
	public Nodo resuelve(Nodo nInicial,Nodo nFinal) {
		int generados = 1;
		int expandidos = 0;
		Date inicio = new Date();
		boolean enc = false;
		Nodo n = null;
		ColaPrioridadHeurNodos cola = new ColaPrioridadHeurNodos();
		ListaNodos listaCerrados = new ListaNodos();
		cola.inserta(nInicial);
		while(!enc){
			n = cola.extrae();
			if(n.esFinal()){
				enc = true;
				Date fin = new Date();
				float total = (fin.getTime()-inicio.getTime())/1000f;
				String saux = n.getCamino()+'\n'+"Nodos generados: "+generados+'\n'+"Nodos expandidos: "+expandidos+
				'\n'+"Tiempo transcurrido: "+total+" segundos"+'\n'+"Profundidad: "+n.getProfundidad()+'\n'+"Coste: "+n.getCoste();
				n.setCamino(saux);
			}else if(!listaCerrados.estadoRepetido(n)){
				listaCerrados.inserta(n);
				cola.insertaVector(n.generaHijos());
				expandidos++;
				generados = generados + n.generaHijos().size();
			}
		}
		return n;
	}
	
	/**
	 * main para probar la estrategia
	 * @param args
	 */
	public static void main(String[] args) {
		Cubo n = new Cubo(15,3,4,3,7,2);
		Voraz p = new Voraz();
		Cubo re = (Cubo) p.resuelve(n,n);
		System.out.println(re.getCamino());
	}
}
